package inmobiliaria.frsf.model;

import inmobiliaria.frsf.enums.TipoDocumentoEnum;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public abstract class Persona {

	private Integer idPersona;
	private Domicilio domicilio;
	private String nombre;
	private String apellido;
	private String telefono;
	private String email;
	private Integer tipoDocumento;
	private Integer numeroDocumento;
	private Calendar fechaAlta;
	private Date fechaAltaCalendar;

	/**
	 * Constructor
	 */
	public Persona() {
		this.idPersona = null;
		this.domicilio = new Domicilio();
		this.nombre = null;
		this.apellido = null;
		this.telefono = null;
		this.email = null;
		this.tipoDocumento = null;
		this.numeroDocumento = null;
		this.fechaAlta = null;
	}

	public Persona(Integer id, Domicilio domicilio, String nombre,
			String apellido, String telefono, String email,
			Integer tipoDocumento, Integer numeroDocumento, Calendar fechaAlta) {
		this.idPersona = id;
		this.domicilio = domicilio;
		this.nombre = nombre;
		this.apellido = apellido;
		this.telefono = telefono;
		this.email = email;
		this.tipoDocumento = tipoDocumento;
		this.numeroDocumento = numeroDocumento;
		this.fechaAlta = fechaAlta;
	}

	/**
	 * @return the idPersona
	 */
	public Integer getIdPersona() {
		return idPersona;
	}

	/**
	 * @param idPersona
	 *            the idPersona to set
	 */
	public void setIdPersona(Integer idPersona) {
		this.idPersona = idPersona;
	}

	/**
	 * @return the domicilio
	 */
	public Domicilio getDomicilio() {
		return domicilio;
	}

	/**
	 * @param domicilio
	 *            the domicilio to set
	 */
	public void setDomicilio(Domicilio domicilio) {
		this.domicilio = domicilio;
	}

	/**
	 * @return the nombre
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * @param nombre
	 *            the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/**
	 * @return the apellido
	 */
	public String getApellido() {
		return apellido;
	}

	/**
	 * @param apellido
	 *            the apellido to set
	 */
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	/**
	 * @return the telefono
	 */
	public String getTelefono() {
		return telefono;
	}

	/**
	 * @param telefono
	 *            the telefono to set
	 */
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * @param email
	 *            the email to set
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * @return the tipoDocumento
	 */
	public Integer getTipoDocumento() {
		return tipoDocumento;
	}

	/**
	 * @param tipoDocumento
	 *            the tipoDocumento to set
	 */
	public void setTipoDocumento(Integer tipoDocumento) {
		this.tipoDocumento = tipoDocumento;
	}

	/**
	 * @return the numeroDocumento
	 */
	public Integer getNumeroDocumento() {
		return numeroDocumento;
	}

	/**
	 * @param numeroDocumento
	 *            the numeroDocumento to set
	 */
	public void setNumeroDocumento(Integer numeroDocumento) {
		this.numeroDocumento = numeroDocumento;
	}

	/**
	 * @return the fechaAlta
	 */
	public Calendar getFechaAlta() {
		return fechaAlta;
	}

	/**
	 * @param fechaAlta
	 *            the fechaAlta to set
	 */
	public void setFechaAlta(Calendar fechaAlta) {
		this.fechaAlta = fechaAlta;
	}

	public String getDescripcionTipoDocumento() {
		return TipoDocumentoEnum.getDescripcion(tipoDocumento);
	}

	public Date getFechaAltaFormateada() {
		return fechaAlta.getTime();
	}

	/**
	 * @return the fechaAltaCalendar
	 */
	public Date getFechaAltaCalendar() {
		return fechaAltaCalendar;
	}

	/**
	 * @param fechaAltaCalendar
	 *            the fechaAltaCalendar to set
	 */
	public void setFechaAltaCalendar(Date fechaAltaCalendar) {
		this.fechaAlta = new GregorianCalendar();
		this.fechaAlta.setTime(fechaAltaCalendar);
	}

}
